package com.saver.core.processor;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import android.util.Log;

import com.saver.core.domain.MensajeTexto;

public class Interbank extends GenericBankProcessorSMS implements ProcessorSMS{
	
	private static final String TAG = "ProcessorSMS-BBVA";
	
	private static final String PATRON_1 = "^INTERBANK\\s*HAS REALIZADO UNA?\\s+(.*)\\s+CON TU([^0-9]+)(\\d+) POR ([^0-9]+)([\\.,\\d]+) EN EL COMERCIO (.*)\\s*\\((\\d\\d/\\d\\d \\d\\d:\\d\\d)\\)$";
	private static final String PATRON_2 = "^INTERBANK\\s*HAS REALIZADO UNA?\\s+(.*)\\s+CON TU([^0-9]+)(\\d+) POR ([^0-9]+)([\\.,\\d]+)\\s*\\((\\d\\d/\\d\\d \\d\\d:\\d\\d)\\)$";

	private static final String PATRON_FECHA = "yyyy/dd/MM HH:mm";

	@Override
	public TipoBanco tipoBanco() {
		return TipoBanco.INTERBANK;
	}

	@Override
	public List<Token> process(MensajeTexto mensajeTexto) {
		ArrayList<Token> lista = new ArrayList<Token> (1);
		
		String sms = mensajeTexto.getBody();
		Log.d(TAG, sms);
		Pattern pattern = Pattern.compile(PATRON_1);
		Matcher matcher = pattern.matcher(sms);
		if (matcher.find()) {
				Token token = new Token (TipoBanco.INTERBANK, mensajeTexto.getDate());
//				token.setCategoria(matcher.group(1).trim());
				token.setEstablecimiento(matcher.group(6).trim());//////
				try {
					Calendar calendar = Calendar.getInstance();
					calendar.setTimeInMillis(mensajeTexto.getDate());
					SimpleDateFormat dateFormat = new SimpleDateFormat(PATRON_FECHA, Locale.getDefault());
					long fecha = dateFormat.parse(calendar.get(Calendar.YEAR) + "/" + matcher.group(7).trim()).getTime();
					token.setFechaTransaccion(fecha);
				} catch (ParseException e) {
					Log.e(TAG, "error al parsear la fecha", e);
				}
				token.setImporte(Double.parseDouble(matcher.group(5).trim().replace(",", "")));////
				token.setMoneda(matcher.group(4).trim());/////
				token.setNumero(matcher.group(3).trim());/////
				token.setTipo(matcher.group(2).trim());/////
				token.setTipoToken(TipoToken.EGRESO);
				
				lista.add(token);
			
		} else  {
			pattern = Pattern.compile(PATRON_2);
			matcher = pattern.matcher(sms);
			if (matcher.find()) {
				Token token = new Token (TipoBanco.INTERBANK, mensajeTexto.getDate());
				token.setCategoria(matcher.group(1).trim());////
//				token.setEstablecimiento(matcher.group(3).trim());
				try {
					Calendar calendar = Calendar.getInstance();
					calendar.setTimeInMillis(mensajeTexto.getDate());
					SimpleDateFormat dateFormat = new SimpleDateFormat(PATRON_FECHA, Locale.getDefault());
					long fecha = dateFormat.parse(calendar.get(Calendar.YEAR) + "/" + matcher.group(6).trim()).getTime();
					token.setFechaTransaccion(fecha);
				} catch (ParseException e) {
					Log.e(TAG, "error al parsear la fecha", e);
				}
				token.setImporte(Double.parseDouble(matcher.group(5).trim().replace(",", "")));///
				token.setMoneda(matcher.group(4).trim());//////
				token.setNumero(matcher.group(3).trim());/////
				token.setTipo(matcher.group(2).trim());/////
				token.setTipoToken(TipoToken.EGRESO);
				
				lista.add(token);
			}
		}
		
		return lista;
	}

	@Override
	@Deprecated
	public	boolean isValid(String sms) {
		// TODO Auto-generated method stub
		return false;
	}

}
